Skip to content

feat(core): migrate every persistent setting into the property catalog - #21

Merged
nmrtist merged 1 commit into
mainfrom
feat/property-catalog-full-migration
Jul 27, 2026
Merged

nmrtist merged 1 commit into
mainfrom
feat/property-catalog-full-migration

Conversation

@nmrtist

@nmrtist nmrtist commented Jul 27, 2026

Copy link
Copy Markdown
Owner

Every persistent setting the interface edits now has one registration in the
property catalog: a stable id, a schema that states its own bounds, a tier, and
a typed read/edit path. The panels stop carrying their own widgets and render
catalog rows instead, so search, the modified marker, reset, multi-target
editing and automation all follow from the same declaration.

Covered: the dataset processing recipe, canvas and document settings, plot
object settings, and application preferences.

No project or settings file format changes. The catalog was adapted to the
existing domain types throughout; that is what makes a single change of this
size reviewable.

Behaviour changes worth release notes

  • The group-delay switch takes effect for 2D data. The correction had been
    applied to the direct dimension whatever the switch said.
  • Clearing Auto bins on a histogram seeds the count from the current data's
    Freedman–Diaconis result.
  • Several units and captions that disagreed with the value beside them are
    corrected — most visibly the contour base level, which was editing a base-10
    exponent under a bare "intensity" caption.

Migrated rows otherwise keep the visibility they had.

Automation contract

The property tools now reach application, document, canvas, object, series and
processing-step settings.

The inspection wire format grows additively — a reading carries its
availability, the reason it is disabled, whether it was modified, and a schema
whose float form states its display projection (unit and log restate that
projection and are kept for compatibility). Clients that switch exhaustively
on schema types must handle the two new ones, text and stepped_int.

Second state sources removed

  • Object snapping, the canvas accent and the project backup count each had a
    session mirror synchronised in both directions. Saving a project wrote the
    stale mirror back over the settings, so an edit could silently revert.
  • A plot object's figure and the axis presentation derived from it are private
    and can only be replaced together, so a rebuild cannot leave the recorded
    derivation behind.

Deliberately left out

Recorded as constraints rather than half-built: enum variants minted at runtime
(chart column, attached projection sources), per-region and per-integral
component addressing, the per-monitor UI scale map, MRU and user-collection
settings, and axis range overrides. Two fields with no editor today
(SeriesBinding label, panel note font size) are not migrated either, since
adding a control the product never had is not a migration.

Panel budget

The per-section budget counts the rows a user can see at once rather than the
rows a section declares, sharing the applicability predicate with the providers
instead of restating it. Every section stays within six.

Verification

cargo pr-check passes all seven steps; npm run build in docs/ builds all
67 pages. Test count 1183 → 1292.

Every persistent setting the interface edits now has one registration in the
property catalog: a stable id, a schema that states its own bounds, a tier, and
a typed read/edit path. The panels stop carrying their own widgets and render
catalog rows instead, so search, the modified marker, reset, multi-target
editing and automation all follow from the same declaration.

Migrated: the dataset processing recipe, canvas and document settings, plot
object settings, and application preferences.

Value model
- One float schema. `Float { bounds, display, drag_step }` replaces a boolean
  log flag plus a free-standing unit, so a control can no longer show one
  numeric space while labelling another. The `log10` prefix is derived from the
  display rather than repeated by each definition: the contour base level had
  been editing an exponent under a bare "intensity" caption.
- A text schema and text value, which costs the value type its `Copy`.
- A derived default policy, for defaults that come from a rebuilt artifact
  rather than a factory or a literal.
- Absence stays modelled as a discriminator plus a disabled dependent, as phase
  already did. No nullable value enters the catalog.

Second state sources removed
- Object snapping, the canvas accent and the project backup count each had a
  session mirror synchronised in both directions. Saving a project wrote the
  stale mirror back over the settings, so an edit could silently revert. The
  mirrors are gone and the readers use the settings directly.
- A plot object's figure and the axis presentation derived from it are private
  and can only be replaced together, so a rebuild cannot leave the recorded
  derivation behind.

Behaviour
- The group-delay switch takes effect for 2D data; the correction had been
  applied to the direct dimension whatever the switch said.
- Clearing Auto bins seeds the count from the current data's Freedman-Diaconis
  result.
- Migrated rows keep the visibility they had, and several units and captions
  that disagreed with the value beside them are corrected.

Automation
- The property tools reach application, document, canvas, object, series and
  processing-step settings.
- A reading carries its availability, the reason it is disabled, whether it was
  modified, and a schema whose float form states its display projection. Unit
  and log restate that projection. Clients that switch exhaustively on schema
  types must handle text and stepped integers.

Panel budget
- The per-section budget counts the rows a user can see at once rather than the
  rows a section declares, sharing the applicability predicate with the
  providers instead of restating it. Every section stays within six.

No project or settings file format changes.
@nmrtist
nmrtist marked this pull request as ready for review July 27, 2026 04:41
@nmrtist
nmrtist merged commit 5b303a0 into main Jul 27, 2026
11 checks passed
@nmrtist
nmrtist deleted the feat/property-catalog-full-migration branch July 27, 2026 04:41
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 27, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant